﻿
//页面滚动
function body_scroll(top_y){
    top_y = top_y - 15;
    $('body,#nav').stop();
    $('html,body').animate({scrollTop: top_y}, 500);
}

// 菜单滚动
function nav_scroll(top_y) {
    nav_height = $('#nav').height(); 
    body_height = $('#markdown').height()+$('#markdown').offset().top;
    if((body_height - top_y) > nav_height ){
        if (top_y > $('#markdown').offset().top) {
            $('#nav').animate({top:top_y+10}, 300); // +10
        }else{
            $('#nav').animate({top:$('#markdown').offset().top}, 300);
        }
    }else{
        $('#nav').animate({top:(body_height - nav_height)}, 300)
    }
}

// 目录随动
function nav_active(dom) {
    $('#nav li').removeClass('active');
    dom.parent('li').addClass('active');
    a_top = $(dom.attr('href')).offset().top;
    a_height = dom.attr('href').replace('#','')*38;
    nav_scroll(a_top - a_height );
}

// 判定显示还是隐藏
function nav_toggle() {
    if ($('#nav').css('display') == 'none') {
        $('#nav').fadeIn('300');
    }else{
        nav_s = $('#nav').offset().top;
        nav_h = $('#nav').height();
        doc_s = $(document).scrollTop();
        win_h =$(window).height();
        (nav_s+nav_h-30) > doc_s && nav_s < (doc_s+win_h-30) && $('#nav').fadeOut('300');
    };
}

function tree_create () {
    // 计数
    nav_count=0;
    h1=0;
    h2=0;
    h3=0;
    h4=0;
    var nav = "";
    // 生产
    $('#markdown h1,#markdown h2,#markdown h3,#markdown h4').each(function(){
        var i=$('#markdown h1,#markdown h2,#markdown h3').index($(this))

        var txt=$(this).text();

        if(!$(this).attr('id')){
            $(this).attr('id',i);
        }else{
            i=$(this).attr('id');
        }

        nav_count +=1;
        if($(this).get(0).tagName == 'H1'){
            h1++; 
            h2=0;
            nav += "<li><a href='#"+i+"'>&#182; "+txt+"</a></li>";
        }else if($(this).get(0).tagName == 'H2'){
            h2++; 
            h3=0;
            $(this).html("<span class='add'>"+h2+".</span> "+$(this).html());
            nav += "<li><a href='#"+i+"'>&gt; "+h2+".&nbsp;"+txt+"</a></li>";
        }else if($(this).get(0).tagName == 'H3'){
            h3++;
            h4=0;
            $(this).html("<span class='add'>"+h2+"-"+h3+".</span> "+$(this).html());
            nav += "<li><a href='#"+i+"'>&gt;&gt; "+h2+"-"+h3+".&nbsp;"+txt+"</a></li>";
        }else if($(this).get(0).tagName == 'H4'){
            h4++;
            $(this).html("<span class='add'>"+h2+"-"+h3+"-"+h4+".</span> "+$(this).html());
            //nav += "<li><a href='#"+i+"'>"+h2+"-"+h3+"-"+h4+".&nbsp;"+txt+"</a></li>";
        }
    });
    $('#nav-ul').append(nav);
}

$(function(){

    //$('#keyboard ul').css('display','none');

    $('.sides-box h3').click(
        function(){$(this).next('ul').animate({"height":'toggle'},100);}
    );

    // 为markdown中的表格添加样式
    $('#markdown table').addClass('table table-striped table-bordered table-condensed');

    tree_create();

    //锚点滚动控制
    $('#nav').delegate('a[href*=#]','click',function(){
        body_scroll($($(this).attr('href')).offset().top);
        nav_active($(this));
    });

    // 标题按钮
    $('#btn_nav').on('click',function(){
        nav_toggle()
        nav_scroll($(document).scrollTop());
    });

    // 显示menu.markdown 的内容
    $('#btn_menu').on('click',function(){
        $('#md_menu').modal({
            backdrop:true,
            keyboard:true,
            show:true
        });
    })

    // 滚动到最上 nav随行
    $('#btn_top').on('click',function(){
        body_scroll(0);
        nav_scroll(0);
    });

    $('#btn_down').on('click',function(){
        // 标记最低位置
        down = $('#markdown').offset().top+$('#markdown').height();
        body_scroll(down);
        nav_scroll(down);
    });

    // vim 控制 j k up down  
    $(document).on('keydown',function(event){
        //alert(event.keyCode);
        xy_now =$(this).scrollTop();
        win_height=$(window).height();

        xy_page_prev=xy_now - win_height/3;
        xy_page_next=xy_now + win_height/3;

        key =event.keyCode || event.which;

        // 按照目录
        xy_prev = 0;
        xy_next = 0;
        for (i=0;i < nav_count;i++){
            node= $('#nav-ul a:eq('+i+')').attr('href');
            nav_now = $(node).offset().top;
            if(nav_now < (xy_now+10)) {
                xy_prev = i;
            }else if(nav_now > (xy_now+30)) {
                xy_next = i;
                break;
            }
        }

        $('#nav li').removeClass('active');

        //event.which
        switch(key){
            case 71: //g 0
                body_scroll($('#markdown').offset().top+10);
                nav_scroll(0);
                break;
            case 68: //d
                down = $('#markdown').offset().top+$('#markdown').height();
                body_scroll(down);
                nav_scroll(down);
                break;
            case 74: //j pagedown
                body_scroll(xy_page_next);
                nav_active($('#nav a:eq('+xy_next+')'));
                break;
            case 75: //k pageup
                body_scroll(xy_page_prev);
                nav_active($('#nav a:eq('+xy_prev+')'));
                break;
            case 76: //l list pages
                $('#md_menu').modal({
                    backdrop:true,
                    keyboard:true,
                    show:true
                });
                break;
            case 77: //m showmenu
                nav_toggle()
                    nav_scroll($(document).scrollTop());
                break;
            case 78: //n title down
                body_scroll($($('#nav a:eq('+xy_next+')').attr('href')).offset().top);
                nav_active($('#nav a:eq('+xy_next+')'));
                break;
            case 80: //p title up
                body_scroll($($('#nav a:eq('+xy_prev+')').attr('href')).offset().top);
                nav_active($('#nav a:eq('+xy_prev+')'));
                break;
        }
    });

    //nav_scroll(0);

    //默认隐藏
    $('#nav').fadeIn(300);
	nav_scroll($(document).scrollTop());

});

